/*
 * Topic: 整数划分(Split A Integer)
 * Author: Yuanshun L
 * Written: 4-Nov-2021
 * Method: 迭代法
 */

#include<iostream>
#include<cstring>
using namespace std;

#define maxn 10
int n;
int res[maxn];
int pre = -1;

// 现在剩余值为k，已经罗列的值的个数为m
void solve(int k,int m){
    if(k<=0){
        if(pre!=-1 && pre!=res[0]){
            cout<<endl;
        }
        if(pre==res[0]) cout<<",";

        for(int i=0;i<m-1;i++){
            cout<<res[i]<<"+";
        }
        cout<< res[m-1];
        pre = res[0];

        return;
    }
    for(int i=k;i>0;i--){
        if(m > 0 &&  i > res[m-1]) continue;
        res[m] = i;
        solve(k-i,m+1);
    }
}


int main(){

    memset(res,0,sizeof(res));

    cin >> n;
    solve(n,0);
    return 0;
}